/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ppsa.dao;

import com.ppsa.bean.ResultadoBean;
import com.ppsa.bean.UsuarioBean;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author AdminTdp
 */
public class UsuarioDao extends AccesoDao {

    static final Logger m_log = Logger.getLogger(UsuarioDao.class.getName());

    public UsuarioDao() throws AccesoDaoException {
        super();
    }
    public UsuarioBean obtenerUsuario( UsuarioBean objA_usuario) throws Exception {
        UsuarioBean objL_usuario = new UsuarioBean();

        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_obtenerUsuario(?) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);
            objPt_cstmt.setString(1, objA_usuario.getStrpv_codigoUsuario());
            objPt_rs = objPt_cstmt.executeQuery();
            while( objPt_rs.next() ) {
                objL_usuario.setStrpv_codigoUsuario(objPt_rs.getString("ID_USUARIO"));
                objL_usuario.setStrpv_codigoPerfil(objPt_rs.getString("ID_PERFIL"));
                objL_usuario.setStrpv_nombreUsuario(objPt_rs.getString("NOMBRE_USUARIO"));
                objL_usuario.setStrpv_nombrePerfil(objPt_rs.getString("NOMBRE_PERFIL"));

                
            }
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        
        return objL_usuario;
    }
    
     public List<UsuarioBean> listarUsuario(UsuarioBean objA_UsuariiBean) throws Exception {
         List<UsuarioBean> lstL_usuario = new ArrayList<UsuarioBean>();
          


        UsuarioBean objL_usuario = null;
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_listarUsuario() }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);

            objPt_rs = objPt_cstmt.executeQuery();
            while( objPt_rs.next() ) {
                objL_usuario = new UsuarioBean();
                //System.out.println("--->" + objPt_rs.getString("NOMBRE"));
                objL_usuario.setStrpv_codigoUsuario(objPt_rs.getString("ID_USUARIO"));
                objL_usuario.setStrpv_nombreUsuario(objPt_rs.getString("NOMBRE_USUARIO"));
                objL_usuario.setStrpv_nombrePerfil(objPt_rs.getString("NOMBRE_PERFIL"));

                lstL_usuario.add(objL_usuario);
            }
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }        
         return lstL_usuario;
     }
  
    public HashMap<String,String> validarUsuario(String strpv_nombreUsuario, String strpv_clave) throws Exception {
        
       m_log.info("[validarUsuario] << ENTER");
        
        HashMap<String,String> hmL_valida = null;
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_validarUsuario( ?,?, ?,?,?,? ) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);

            objPt_cstmt.setString(1, strpv_nombreUsuario);
            objPt_cstmt.setString(2, strpv_clave);
            objPt_cstmt.registerOutParameter(3, java.sql.Types.NVARCHAR);
            objPt_cstmt.registerOutParameter(4, java.sql.Types.NVARCHAR);
            objPt_cstmt.registerOutParameter(5, java.sql.Types.INTEGER);
            objPt_cstmt.registerOutParameter(6, java.sql.Types.NVARCHAR);
            objPt_cstmt.executeUpdate();

            hmL_valida = new HashMap<String, String>();
            hmL_valida.put("strpv_mensaje", objPt_cstmt.getString(3) );
            hmL_valida.put("strpv_codigoUsuario", objPt_cstmt.getString(4));
            hmL_valida.put("strpv_codigoPerfil", "" + objPt_cstmt.getInt(5));
            hmL_valida.put("strpv_nombreUsuario",objPt_cstmt.getString(6));
            m_log.info("strpv_mensaje       -> " + objPt_cstmt.getString(3));
            m_log.info("strpv_codigoUsuario -> " + objPt_cstmt.getString(4));
            m_log.info("strpv_codigoPerfil  -> " + objPt_cstmt.getString(5));
            m_log.info("strpv_nombreUsuario -> " + objPt_cstmt.getString(6));
        } catch ( Exception ex ) {
            m_log.error("[validarUsuario] Ex* " + ex.getMessage() );
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        m_log.info("[validarUsuario] >> EXIT");
        return hmL_valida;
    }
    
    
     public Integer actualizarUsuario(UsuarioBean objA_usuarioBean) throws Exception {

        System.out.println("[PerfilDao/actualizarUsuario] << ENTER");

        Integer intL_temp = -1;
        Integer intL_resultado = -1;
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_actualizarUsuarioPerfil( ?,?, ? ) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);

            System.out.println("->>>>>>>>>>>>>>>>>>>" + intL_temp );
            objPt_cstmt.setString(1, objA_usuarioBean.getStrpv_codigoUsuario());
            objPt_cstmt.setInt(2, Integer.parseInt(objA_usuarioBean.getStrpv_codigoPerfil()));
            objPt_cstmt.setString(3, objA_usuarioBean.getStrpv_estadoUsuarioPerfil());
            
            intL_resultado = objPt_cstmt.executeUpdate();
            

        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        System.out.println("[PerfilDao/actualizarUsuario] << EXIT");
        return intL_resultado;
    }

    public ResultadoBean actualizarDocumentoEstado(String strpv_codigoDocumento, String strpv_codigoVersion, String strpv_tipoActualizacion , UsuarioBean objL_usuario)throws Exception {
        m_log.info( "[actualizarDocumentoEstado] << ENTER" );

        ResultadoBean obj_resultado = new  ResultadoBean();
        try {
            //this.objPt_conn = objPt_dataSource.getConnection();
            this.objPt_conn = DriverManager.getConnection(strpv_conexionUrl);
            String strl_procedure = "{ call ppsa_sp_actualizarDocumentoVersion( ?,?, ?,?,? ) }";
            objPt_cstmt = objPt_conn.prepareCall(strl_procedure);

            
            objPt_cstmt.setInt(1, Integer.parseInt(strpv_codigoDocumento));
            objPt_cstmt.setInt(2,Integer.parseInt(strpv_codigoVersion));
            objPt_cstmt.setString(3, strpv_tipoActualizacion);
            objPt_cstmt.setString(4, objL_usuario.getStrpv_codigoUsuario());
            objPt_cstmt.registerOutParameter(5, java.sql.Types.NVARCHAR);
            
            objPt_cstmt.execute();
            System.out.println( " ----> " + objPt_cstmt.getString( 5 ) );
            obj_resultado.setStrpv_mensaje( objPt_cstmt.getString( 5 ) );
        } catch ( Exception ex ) {
            ex.printStackTrace();
        } finally {
            closeCallableStatement(objPt_cstmt);
            closeResultSet(objPt_rs);
            closeConnection(objPt_conn);
        }
        m_log.info( "[actualizarDocumentoEstado] >> EXIT" );
        return obj_resultado;
    }
}
